const jwt = require('jsonwebtoken')
const {createUser, getUserInfo, edit,search,searchUserTotal,del} = require('../service/user.service')
const { userRegisterError } = require('../constant/err.type')
const { JWT_SECRET } = require('../config/config.default')

class UserController {
  // 注册方法
  async register(ctx,next){

    // 1、接收参数
    const { user_name, pass_word } = ctx.request.body;

    // 2、传递数据
    try{
      const res = await createUser(user_name, pass_word);
      // 3、返回数据
      ctx.body = {
        code: 200,
        data: {},
        msg: "注册成功",
      }
    } catch(err) {
      ctx.app.emit('error', userRegisterError, ctx)

    }
   
    
  }
  // 登录方法
  async login(ctx,next){
    // 1、接收参数
    const { user_name } = ctx.request.body
   
    try{
      // 2、查询数据库  
      const res = await getUserInfo({user_name});

      let obj = {}
      Object.assign(obj,res[0])
      obj.token = jwt.sign(obj, JWT_SECRET, { expiresIn: '1d' })

      // 3、返回数据
      ctx.body = {
        code: 200,
        result: obj,
        msg: "登录成功",
      }
    } catch(err) {
      console.error('用户登录失败', err)
    }
    
    
  }
  // 修改密码
  async changePassword(ctx,next){
    // 1、接收参数
    const { id, pass_word } = ctx.request.body
    // 2、更新
    const res = await edit(id, pass_word);
    if(res) {
      // 3、返回数据
      ctx.body = {
        code: 200,
        data: {},
        msg: "修改成功",
      } 
    } else {
       // 3、返回数据
       ctx.body = {
        code: '10007',
        data: {},
        msg: "修改失败",
      } 
    }

    
  }
  // 删除用户
  async deleteUser(ctx,next){
    // 1、接收参数
    const { id, pass_word } = ctx.request.body
    // 2、查询数据库, 获取id
    const res = await del(id, pass_word);

     // 3、返回数据
     ctx.body = {
      code: 200,
      data: {},
      msg: "修改成功",
    } 
  }
  // 查询用户
  async search_user(ctx) {
    // 1、接收参数
    const { pageNum, pageSize } = ctx.request.body;
    try {
      const res = await search({pageNum, pageSize});
      // 查询总数
      const resTotal = await searchUserTotal();
      let total = resTotal[0].total;

       // 3、返回数据
       ctx.body = {
        code: 200,
        data: {
          result: res,
          total: total
        },
        msg: "查询成功",
      }
    } catch(err) {
      console.log(err)
    }
  }
}

module.exports = new UserController();